/**
 * get
 * @param {string} url 请求地址
 * @param {object} params 请求参数
 * @param {function} callback 回调函数
 * @param {string|null} type 后端返回的数据类型
 * @param {object} headers 自定义请求头
 */
function get(url,params,callback,type=null,headers={}){
    //一 创建xhr对象
const xhr = new XMLHttpRequest
//二 监控请求状态
xhr.onreadystatechange = ()=>{
    //判断是否返回数据
    if(xhr.readyState === 4)
    {
        //判断返回数据的状态
        if(xhr.status === 200)
        {
            //获取数据
            let res = xhr.responseText
            //判断type=json的时候再格式化
            if(type==='json') res = JSON.parse(res)
            callback(res)
        }else{
            console.log('有误',xhr.status);
        }
    }
}
//三 设置请求方式 请求地址
let temp = []
for(let key in params)
{
    temp.push(`${key}=${params[key]}`)
}
//xhr.open('get',`请求地址？请求参数`)
xhr.open('get',`${url}?${temp.join('&')}`)
//自定义请求头
for(let key in headers)
{
    xhr.setRequestHeader(key,headers[key])
}
//四 发送请求
xhr.send(null)
}



/**
 * post
 * @param {string} url 请求地址
 * @param {object} params 请求参数
 * @param {function} callback 回调函数
 * @param {string|null} type 后端返回的数据类型
 * @param {object} headers 自定义请求头
 */
function post(url,params,callback,type=null,headers={}){
    //一 创建xhr对象
const xhr = new XMLHttpRequest
//二 监控请求状态
xhr.onreadystatechange = ()=>{
    //判断是否返回数据
    if(xhr.readyState === 4)
    {
        //判断返回数据的状态
        if(xhr.status === 200)
        {
            //获取数据
            let res = xhr.responseText
            //判断type=json的时候再格式化
            if(type==='json') res = JSON.parse(res)
            callback(res)
        }else{
            console.log('有误',xhr.status);
        }
    }
}
//三 设置请求方式 请求地址

xhr.open('post',url)
xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
for(let key in headers)
{
    xhr.setRequestHeader(key,headers[key])
}
//四 发送请求
let temp = []
for(let key in params)
{
    temp.push(`${key}=${params[key]}`)
}
xhr.send(temp.join('&'))
}


export {get,post}
